# 封装
# _单下划线开头的属性或方法表示protected受保护的成员，仅提供内部使用，允许类本身和子类访问
# 私有成员和私有方法用两个下划线表示
class Phone:
    __curr = 2  # 运行电压
    def __kee(self):
        print("让CPU单核模式运行")
    def callBy5G(self):
        # 判断电压是否足够，够的话可以通话
        if self.__curr > 1:
            print("5G可以通话")
        else:
            print("电压不足")
            self.__kee()
    #使用@property时就变成了成员属性
    @property
    def price(self):
        return 888


phone1 = Phone()
phone1.callBy5G()
print(phone1.price)

print("----------------------------------------------")
class Foo:
    @property
    def d1(self):
        print("@property")
    @d1.setter
    def d1(self, value):
        print(value)
    @d1.deleter
    def d1(self):
        print("del")
# 调用
obj = Foo()
obj.d1
obj.d1 = 123
del obj.d1
print("----------------------------------------------")

class P:
    def getx(self):
        print("getx")
    def setx(self,value):
        print(value)
    def delx(self):
        print("delx")
    x = property(getx,setx,delx)
p = P()
# 直接用点属性行，会去找getx方法
p.x
# 调用点给属性赋值时，程序会去找setx方法
p.x = 100
# 用del时，程序会去找delx方法
del p.x